package com.bilibili.juc.cf.one;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/*
3. thenApply/thenApplyAsync
CompletableFuture的thenApply方法表示，第一个任务执行完成后，
执行第二个回调方法任务，会将该任务的执行结果，作为入参，传递到回调方法中，并且回调方法是有返回值的。
 */
public class FutureThenApplyTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        CompletableFuture<String> orgFuture = CompletableFuture.supplyAsync(
                ()->{
                    System.out.println("原始CompletableFuture方法任务");
                    return "捡田螺的小男孩";
                }
        );

        CompletableFuture<String> thenApplyFuture = orgFuture.thenApply((a) -> {
            System.out.println("前一个 CompletableFuture 运算结果传递给第二个CompletableFuture 传递的值为: "+ a);
            if ("捡田螺的小男孩".equals(a)) {
                return "关注了==>> "+a;
            }

            return "先考虑考虑";
        });

        System.out.println("第二个CompletableFuture 返回的结果为: "+thenApplyFuture.get());
    }
    /*
原始CompletableFuture方法任务
前一个 CompletableFuture 运算结果传递给第二个CompletableFuture 传递的值为: 捡田螺的小男孩
第二个CompletableFuture 返回的结果为: 关注了
     */
}
